Skip to main content

Port Knocking

Ce guide explique comment mettre en place une séquence de Port Knocking pour ouvrir dynamiquement l’accès au port d’un routeur MikroTik uniquement après réception de knocks spécifiques.

🚀 Objectif

Mettre en place un système où :

  1. Tous les ports sensibles (ex. SSH) sont fermés par défaut.
  2. Une séquence de ports (ex. 1234 → 2345 → 3456) doit être “tapée” dans l’ordre.
  3. Après knocks corrects, le routeur ouvre temporairement le port SSH pour l’IP du client.

📌 Prérequis

  • Un routeur MikroTik RouterOS (v6 ou v7)
  • WinBox installé
  • Droits administratifs sur le routeur
  • Un client pour envoyer les knocks (Windows, Linux, Android…)

🛠️ Étapes d’installation

1️⃣ Créer des adresses lists

Créer via WinBox → IP → Firewall → Address Lists :

  • knock1
  • knock2
  • allowed

2️⃣ Ajouter les règles de knocks

Knock 1 : Port 1234

Chain: input
Protocol: tcp
Dst. Port: 1234
Action: add-src-to-address-list → knock1 (timeout 20s)

Terminal

/ip firewall filter add chain=input protocol=tcp dst-port=1234 action=add-src-to-address-list address-list=knock1 address-list-timeout=20s

Knock 2 : Port 2345 (nécessite knock1)

Chain: input
Protocol: tcp
Dst. Port: 2345
Src. Address List: knock1
Action: add-src-to-address-list → knock2 (timeout 20s)

Terminal

/ip firewall filter add chain=input protocol=tcp dst-port=2345 action=add-src-to-address-list address-list=knock2 address-list-timeout=20s

Knock 3 : Port 3456 → Autorisation

Chain: input
Protocol: tcp
Dst. Port: 3456
Src. Address List: knock2
Action: add-src-to-address-list → allowed (timeout 5m)

Terminal

/ip firewall filter add chain=input protocol=tcp dst-port=3456  src-address-list=knock2  action=add-src-to-address-list address-list=allowed address-list-timeout=5m

Maintenant, on a ajouté l'adresse ip dans la liste des allowed toutes les règles qui utilisent cette liste sont concernées.

🚨 2. Port Scanner Detection (détection Nmap, masscan, etc.)

MikroTik permet de détecter automatiquement les comportements suspects liés aux scans de port.

🔍 Objectif

  • Identifier les IP qui tentent un scan de ports (SYN scan, FIN scan, Xmas scan…)
  • Les ajouter dans une liste port_scanners
  • Les bloquer automatiquement pour une durée donnée (ex : 1 jour)

🟦 1️⃣ Créer une address list port_scanners

/ip firewall address-list add list=port_scanners comment="IP détectées en scan"

🟥 2️⃣ Ajouter les règles de détection de scans

Détection SYN Scan

Pas utilisé

/ip firewall filter add chain=input protocol=tcp tcp-flags=syn,!ack     action=add-src-to-address-list address-list=port_scanners address-list-timeout=1d

Détection FIN Scan

Pas utilisé

/ip firewall filter add chain=input protocol=tcp tcp-flags=fin     action=add-src-to-address-list address-list=port_scanners address-list-timeout=1d

Détection Xmas Scan

Pas utilisé

/ip firewall filter add chain=input protocol=tcp tcp-flags=fin,psh,urg     action=add-src-to-address-list address-list=port_scanners address-list-timeout=1d

Détection Null Scan

Pas utilisé

/ip firewall filter add chain=input protocol=tcp tcp-flags=!syn,!ack,!fin,!rst     action=add-src-to-address-list address-list=port_scanners address-list-timeout=1d

Détection trop nombreuses connexions

Pas utilisé préfère PDS ci-dessous

/ip firewall filter add chain=input protocol=tcp connection-limit=30,32     action=add-src-to-address-list address-list=port_scanners address-list-timeout=1d

Détection Port scanning

Détect la quantité de port scanné avec un même ip

créer une règle input avec dans l'onglet Extra

Dans Action: 'add src to address list' et address List = port-Scanners

🛑 3️⃣ Bloquer les IP détectées avec la détection des ports scanning

/ip firewall filter add chain=input src-address-list=port_scanners action=drop

📊 4️⃣ Vérifier les IP détectées

/ip firewall address-list print where list=port_scanners

🧠 Comprendre les différents types de scans

🔹 SYN Scan

  • Envoie un paquet SYN pour tester un port, sans terminer la connexion.
  • Très utilisé par les scanners car furtif.

🔹 FIN Scan

  • Envoie un FIN seul, normalement utilisé pour fermer une connexion.
  • Comportement anormal → probable scan.

🔹 Xmas Scan

  • Combine FIN + PSH + URG (le paquet “sapin de Noël” 🎄).
  • Jamais vu dans un trafic normal.

🔹 Null Scan

  • Envoie un paquet TCP sans aucun flag.
  • Totalement impossible dans une communication légitime.